package com.atguigu.lease.common.minio;

import io.minio.MinioClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * MinIO 配置类：通过 @Configuration（标识该类为 Spring 配置类） 注解定义为一个 Spring 配置类，负责创建 MinioClient 的 Bean。
 * 1. Spring 启动时，MinioConfiguration 被加载。
 * 2. @EnableConfigurationProperties（显式启用属性绑定） 触发 MinioProperties 的属性绑定。
 * 3. MinioProperties 从配置文件中读取 minio 前缀的属性。
 * 4. MinioConfiguration 使用这些属性创建 MinioClient Bean，供其他组件注入使用。
 *
 * @author Taeyang
 * @date 2025/3/16
 */
@Configuration
@EnableConfigurationProperties(MinioProperties.class)
@ConditionalOnProperty(name = "minio.endpoint")
public class MinioConfiguration {

    @Autowired
    private MinioProperties properties;

    @Bean
    public MinioClient minioClient() {
        return MinioClient.builder().endpoint(properties.getEndpoint()).credentials(properties.getAccessKey(), properties.getSecretKey()).build();
    }
}
